The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 013
LICENSE 0377
MANIFEST 510
MANIFEST.SKIP 440
META.yml 2932
Makefile.PL 2265
README 031
SIGNATURE 3944
dist.ini 020
lib/Search/GIN/Callbacks.pm 830
lib/Search/GIN/Core.pm 334
lib/Search/GIN/DelegateToIndexed.pm 527
lib/Search/GIN/Driver/Hash.pm 334
lib/Search/GIN/Driver/Pack/Delim.pm 334
lib/Search/GIN/Driver/Pack/IDs.pm 334
lib/Search/GIN/Driver/Pack/Length.pm 527
lib/Search/GIN/Driver/Pack/UUID.pm 527
lib/Search/GIN/Driver/Pack/Values.pm 334
lib/Search/GIN/Driver/Pack.pm 334
lib/Search/GIN/Driver/TXN.pm 526
lib/Search/GIN/Driver.pm 527
lib/Search/GIN/Extract/Attributes.pm 627
lib/Search/GIN/Extract/Callback.pm 627
lib/Search/GIN/Extract/Class.pm 727
lib/Search/GIN/Extract/Delegate.pm 434
lib/Search/GIN/Extract/Multiplex.pm 627
lib/Search/GIN/Extract.pm 334
lib/Search/GIN/Indexable.pm 527
lib/Search/GIN/Keys/Deep.pm 627
lib/Search/GIN/Keys/Expand.pm 534
lib/Search/GIN/Keys/Join.pm 334
lib/Search/GIN/Keys.pm 434
lib/Search/GIN/Query/Attributes.pm 628
lib/Search/GIN/Query/Class.pm 628
lib/Search/GIN/Query/Manual.pm 526
lib/Search/GIN/Query/Set.pm 0137
lib/Search/GIN/Query.pm 627
lib/Search/GIN/SelfIDs.pm 627
lib/Search/GIN.pm 1538
t/00-compile.t 048
t/core.t 49
t/release-pod-syntax.t 015
42 files changed (This is a version diff) 2931675
@@ -1,3 +1,16 @@
+0.07    12.09.10
+        * Adds support for Set queries
+        * Renaming excludes to -excludes, requiring Moose >= 0.89
+        * Removing special deprecated usage of qw (now complies with 5.13.5)
+
+0.06    11.09.10
+    - Whoops, missed a debug output
+
+0.05    11.09.10
+    - Adding a bit more docs
+    - Moved to Dist::Zilla
+    - Fixing SIGNATURE file (sorry sorry sorry)
+
 0.04    04.03.10
     - Safer attribute extraction
     - Multiplex extraction now works
@@ -0,0 +1,377 @@
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+Terms of the Perl programming language system itself
+
+a) the GNU General Public License as published by the Free
+   Software Foundation; either version 1, or (at your option) any
+   later version, or
+b) the "Artistic License"
+
+--- The GNU General Public License, Version 1, February 1989 ---
+
+This software is Copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software, licensed under:
+
+  The GNU General Public License, Version 1, February 1989
+
+		    GNU GENERAL PUBLIC LICENSE
+		     Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+                59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The license agreements of most software companies try to keep users
+at the mercy of those companies.  By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must tell them their rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License.  The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications.  Each
+licensee is addressed as "you".
+
+  1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program.  You may charge a fee for the physical act of
+transferring a copy.
+
+  2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+    a) cause the modified files to carry prominent notices stating that
+    you changed the files and the date of any change; and
+
+    b) cause the whole of any work that you distribute or publish, that
+    in whole or in part contains the Program or any part thereof, either
+    with or without modifications, to be licensed at no charge to all
+    third parties under the terms of this General Public License (except
+    that you may choose to grant warranty protection to some or all
+    third parties, at your option).
+
+    c) If the modified program normally reads commands interactively when
+    run, you must cause it, when started running for such interactive use
+    in the simplest and most usual way, to print or display an
+    announcement including an appropriate copyright notice and a notice
+    that there is no warranty (or else, saying that you provide a
+    warranty) and that users may redistribute the program under these
+    conditions, and telling the user how to view a copy of this General
+    Public License.
+
+    d) You may charge a fee for the physical act of transferring a
+    copy, and you may at your option offer warranty protection in
+    exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+  3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+    a) accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of
+    Paragraphs 1 and 2 above; or,
+
+    b) accompany it with a written offer, valid for at least three
+    years, to give any third party free (except for a nominal charge
+    for the cost of distribution) a complete machine-readable copy of the
+    corresponding source code, to be distributed under the terms of
+    Paragraphs 1 and 2 above; or,
+
+    c) accompany it with the information you received as to where the
+    corresponding source code may be obtained.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it.  For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+  4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License.  However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+  5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions.  You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+  7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+  8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+  To do so, attach the following notices to the program.  It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 1, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software Foundation,
+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19xx name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License.  Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  program `Gnomovision' (a program to direct compilers to make passes
+  at assemblers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
+--- The Artistic License 1.0 ---
+
+This software is Copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software, licensed under:
+
+  The Artistic License 1.0
+
+The Artistic License
+
+Preamble
+
+The intent of this document is to state the conditions under which a Package
+may be copied, such that the Copyright Holder maintains some semblance of
+artistic control over the development of the package, while giving the users of
+the package the right to use and distribute the Package in a more-or-less
+customary fashion, plus the right to make reasonable modifications.
+
+Definitions:
+
+  - "Package" refers to the collection of files distributed by the Copyright
+    Holder, and derivatives of that collection of files created through
+    textual modification. 
+  - "Standard Version" refers to such a Package if it has not been modified,
+    or has been modified in accordance with the wishes of the Copyright
+    Holder. 
+  - "Copyright Holder" is whoever is named in the copyright or copyrights for
+    the package. 
+  - "You" is you, if you're thinking about copying or distributing this Package.
+  - "Reasonable copying fee" is whatever you can justify on the basis of media
+    cost, duplication charges, time of people involved, and so on. (You will
+    not be required to justify it to the Copyright Holder, but only to the
+    computing community at large as a market that must bear the fee.) 
+  - "Freely Available" means that no fee is charged for the item itself, though
+    there may be fees involved in handling the item. It also means that
+    recipients of the item may redistribute it under the same conditions they
+    received it. 
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications derived
+from the Public Domain or from the Copyright Holder. A Package modified in such
+a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided that
+you insert a prominent notice in each changed file stating how and when you
+changed that file, and provided that you do at least ONE of the following:
+
+  a) place your modifications in the Public Domain or otherwise make them
+     Freely Available, such as by posting said modifications to Usenet or an
+     equivalent medium, or placing the modifications on a major archive site
+     such as ftp.uu.net, or by allowing the Copyright Holder to include your
+     modifications in the Standard Version of the Package.
+
+  b) use the modified Package only within your corporation or organization.
+
+  c) rename any non-standard executables so the names do not conflict with
+     standard executables, which must also be provided, and provide a separate
+     manual page for each non-standard executable that clearly documents how it
+     differs from the Standard Version.
+
+  d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or executable
+form, provided that you do at least ONE of the following:
+
+  a) distribute a Standard Version of the executables and library files,
+     together with instructions (in the manual page or equivalent) on where to
+     get the Standard Version.
+
+  b) accompany the distribution with the machine-readable source of the Package
+     with your modifications.
+
+  c) accompany any non-standard executables with their corresponding Standard
+     Version executables, giving the non-standard executables non-standard
+     names, and clearly documenting the differences in manual pages (or
+     equivalent), together with instructions on where to get the Standard
+     Version.
+
+  d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this Package. You
+may not charge a fee for this Package itself. However, you may distribute this
+Package in aggregate with other (possibly commercial) programs as part of a
+larger (possibly commercial) software distribution provided that you do not
+advertise this Package as a product of your own.
+
+6. The scripts and library files supplied as input to or produced as output
+from the programs of this Package do not automatically fall under the copyright
+of this Package, but belong to whomever generated them, and may be sold
+commercially, and may be aggregated with this Package.
+
+7. C or perl subroutines supplied by you and linked into this Package shall not
+be considered part of this Package.
+
+8. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
+MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+The End
+
@@ -1,4 +1,11 @@
 Changes
+LICENSE
+MANIFEST
+META.yml
+Makefile.PL
+README
+SIGNATURE
+dist.ini
 lib/Search/GIN.pm
 lib/Search/GIN/Callbacks.pm
 lib/Search/GIN/Core.pm
@@ -27,14 +34,12 @@ lib/Search/GIN/Query.pm
 lib/Search/GIN/Query/Attributes.pm
 lib/Search/GIN/Query/Class.pm
 lib/Search/GIN/Query/Manual.pm
+lib/Search/GIN/Query/Set.pm
 lib/Search/GIN/SelfIDs.pm
-Makefile.PL
-MANIFEST			This list of files
-MANIFEST.SKIP
+t/00-compile.t
 t/attrs.t
 t/class.t
 t/core.t
 t/key_expansion.t
+t/release-pod-syntax.t
 t/rels.t
-META.yml                                 Module meta-data (added by MakeMaker)
-SIGNATURE                                Public-key signature (added by MakeMaker)
@@ -1,44 +0,0 @@
-# Avoid version control files.
-\bRCS\b
-\bCVS\b
-\bSCCS\b
-,v$
-\B\.svn\b
-\B\.git\b
-\b_darcs\b
-
-# Avoid Makemaker generated and utility files.
-\bMANIFEST\.bak
-\bMakefile$
-\bblib/
-\bMakeMaker-\d
-\bpm_to_blib\.ts$
-\bpm_to_blib$
-\bblibdirs\.ts$         # 6.18 through 6.25 generated this
-
-# Avoid Module::Build generated and utility files.
-\bBuild$
-\b_build/
-
-# Avoid temp and backup files.
-~$
-\.old$
-\#$
-\b\.#
-\.bak$
-
-# Avoid Devel::Cover files.
-\bcover_db\b
-
-### DEFAULT MANIFEST.SKIP ENDS HERE ####
-
-\.DS_Store$
-\.sw.$
-(\w+-)*(\w+)-\d\.\d+(?:\.tar\.gz)?$
-
-\.t\.log$
-
-\.prove$
-
-# XS shit
-\.(?:bs|c|o)$
@@ -1,31 +1,34 @@
---- #YAML:1.0
-name:               Search-GIN
-version:            0.04
-abstract:           ~
-author:  []
-license:            unknown
-distribution_type:  module
-configure_requires:
-    ExtUtils::MakeMaker:  0
+---
+abstract: 'Generalized Inverted Indexing'
+author:
+  - 'Yuval Kogman <nothingmuch@cpan.org>'
 build_requires:
-    ExtUtils::MakeMaker:  0
-requires:
-    Data::Stream::Bulk:   0.03
-    Moose:                0
-    MooseX::Types::Path::Class:  0
-    MooseX::Types::Set::Object:  0
-    MRO::Compat:          0
-    namespace::clean:     0.08
-    Scope::Guard:         0
-    Set::Object:          0
-    Test::More:           0
-    Test::TempDir:        0
-    Test::use::ok:        0
-no_index:
-    directory:
-        - t
-        - inc
-generated_by:       ExtUtils::MakeMaker version 6.56
+  File::Find: 0
+  File::Temp: 0
+  MooseX::Types::Set::Object: 0
+  Test::More: 0
+  Test::TempDir: 0
+  ok: 0
+  overload: 0
+configure_requires:
+  ExtUtils::MakeMaker: 6.31
+dynamic_config: 0
+generated_by: 'Dist::Zilla version 4.102345, CPAN::Meta::Converter version 2.102400'
+license: perl
 meta-spec:
-    url:      http://module-build.sourceforge.net/META-spec-v1.4.html
-    version:  1.4
+  url: http://module-build.sourceforge.net/META-spec-v1.4.html
+  version: 1.4
+name: Search-GIN
+requires:
+  Carp: 0
+  Data::Stream::Bulk::Util: 0
+  MRO::Compat: 0
+  Moose: 0.89
+  Moose::Role: 0
+  Scalar::Util: 0
+  Scope::Guard: 0
+  Set::Object: 0
+  Test::Deep::NoTest: 0
+  constant: 0
+  namespace::clean: 0
+version: 0.07
@@ -1,26 +1,69 @@
-#!/usr/bin/perl -w
 
 use strict;
+use warnings;
 
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
-    NAME         => 'Search::GIN',
-    VERSION_FROM => 'lib/Search/GIN.pm',
-    INSTALLDIRS  => 'site',
-    SIGN         => 1,
-    PL_FILES     => { },
-    PREREQ_PM    => {
-        'Moose' => 0,
-        'MooseX::Types::Path::Class' => 0,
-        'MooseX::Types::Set::Object' => 0,
-        'namespace::clean' => '0.08',
-        'Data::Stream::Bulk' => "0.03",
-        'Scope::Guard' => 0,
-        'Set::Object' => 0,
-        'Test::use::ok' => 0,
-        'Test::More' => 0,
-        'Test::TempDir' => 0,
-        'MRO::Compat' => 0,
-    },
+
+
+use ExtUtils::MakeMaker 6.31;
+
+
+
+my %WriteMakefileArgs = (
+  'ABSTRACT' => 'Generalized Inverted Indexing',
+  'AUTHOR' => 'Yuval Kogman <nothingmuch@cpan.org>',
+  'BUILD_REQUIRES' => {
+    'File::Find' => '0',
+    'File::Temp' => '0',
+    'MooseX::Types::Set::Object' => '0',
+    'Test::More' => '0',
+    'Test::TempDir' => '0',
+    'ok' => '0',
+    'overload' => '0'
+  },
+  'CONFIGURE_REQUIRES' => {
+    'ExtUtils::MakeMaker' => '6.31'
+  },
+  'DISTNAME' => 'Search-GIN',
+  'EXE_FILES' => [],
+  'LICENSE' => 'perl',
+  'NAME' => 'Search::GIN',
+  'PREREQ_PM' => {
+    'Carp' => '0',
+    'Data::Stream::Bulk::Util' => '0',
+    'MRO::Compat' => '0',
+    'Moose' => '0.89',
+    'Moose::Role' => '0',
+    'Scalar::Util' => '0',
+    'Scope::Guard' => '0',
+    'Set::Object' => '0',
+    'Test::Deep::NoTest' => '0',
+    'constant' => '0',
+    'namespace::clean' => '0'
+  },
+  'VERSION' => '0.07',
+  'test' => {
+    'TESTS' => 't/*.t'
+  }
 );
+
+
+unless ( eval { ExtUtils::MakeMaker->VERSION(6.56) } ) {
+  my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
+  my $pp = $WriteMakefileArgs{PREREQ_PM};
+  for my $mod ( keys %$br ) {
+    if ( exists $pp->{$mod} ) {
+      $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
+    }
+    else {
+      $pp->{$mod} = $br->{$mod};
+    }
+  }
+}
+
+delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
+  unless eval { ExtUtils::MakeMaker->VERSION(6.52) };
+
+WriteMakefile(%WriteMakefileArgs);
+
+
+
@@ -0,0 +1,31 @@
+NAME
+    Search::GIN - Generalized Inverted Indexing
+
+VERSION
+    version 0.07
+
+DESCRIPTION
+    Inverted Indexing is an indexing method that maps from content to
+    location in storage.
+
+    Generalized Inverted Indexing (GIN, for short) is an inverted indexing
+    method in which the index is unaware of what data exactly is it
+    indexing.
+
+    Search::GIN is primarily used by KiokuDB for custom indexing.
+
+SEE ALSO
+    *   pgsql-hackers msg #00960
+
+    *   Inverted_index on Wikipedia
+
+AUTHOR
+    Yuval Kogman <nothingmuch@cpan.org>
+
+COPYRIGHT AND LICENSE
+    This software is copyright (c) 2010 by Yuval Kogman, Infinity
+    Interactive.
+
+    This is free software; you can redistribute it and/or modify it under
+    the same terms as the Perl 5 programming language system itself.
+
@@ -1,5 +1,5 @@
 This file contains message digests of all files listed in MANIFEST,
-signed via the Module::Signature module, version 0.61.
+signed via the Module::Signature module, version 0.66.
 
 To verify the content in this distribution, first make sure you have
 Module::Signature installed, then type:
@@ -14,49 +14,54 @@ not run its Makefile.PL or Build.PL.
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-SHA1 3b05c08d53a36c79c5b552007254f473fdabc110 Changes
-SHA1 3295a00e24571d07b934f60c6577dd7a992d1829 MANIFEST
-SHA1 190e9058eb9c6446a1a3f3ddf15b082f1ecde152 MANIFEST.SKIP
-SHA1 29a990f33c2d5fec829ad4d306450573c86f44f7 META.yml
-SHA1 5f1e0f865b697a245db203e54249ad6547040946 Makefile.PL
-SHA1 bee3ebc4ad4d9fa3d0d3b992d798f652b0a75123 lib/Search/GIN.pm
-SHA1 f0716b53b0e5fb920f5110b340f712923375a9ce lib/Search/GIN/Callbacks.pm
-SHA1 40890a8eda7a6376352725caef4bf6f639e97d81 lib/Search/GIN/Core.pm
-SHA1 e18e51f98c889704f86653a0e329ad739150b55c lib/Search/GIN/DelegateToIndexed.pm
-SHA1 f20838baeb958044ebd2672331801fa65c58d9b5 lib/Search/GIN/Driver.pm
-SHA1 e54cf4f18644445d03a3068f54f99c4e4eb8fd9d lib/Search/GIN/Driver/Hash.pm
-SHA1 ab00eef4512e693eb5ff757106b5c444d2959a5c lib/Search/GIN/Driver/Pack.pm
-SHA1 b1284f45f183e0c280228c792e608d73ae2fb950 lib/Search/GIN/Driver/Pack/Delim.pm
-SHA1 ed5031536a7d6b2b3015adf15b8a221a99bca4cf lib/Search/GIN/Driver/Pack/IDs.pm
-SHA1 989c4ed53a64718b2020ddcc813ac7acfb283207 lib/Search/GIN/Driver/Pack/Length.pm
-SHA1 ec109e404203dda9e193e939e0ec14efcac8b9cc lib/Search/GIN/Driver/Pack/UUID.pm
-SHA1 07d56e6ce02b50dd78a9f7f6d9687fc67eb17aac lib/Search/GIN/Driver/Pack/Values.pm
-SHA1 ffdbe05b270141e108e06727fcba324246665dc8 lib/Search/GIN/Driver/TXN.pm
-SHA1 b016ba392f6d61c02e16da13986c98a468ad4e3a lib/Search/GIN/Extract.pm
-SHA1 dcc5b8771bf0a387f5f417bc2aa87196e2e0b361 lib/Search/GIN/Extract/Attributes.pm
-SHA1 f093a56d9218702b93dd150f8e5797d61f33db9d lib/Search/GIN/Extract/Callback.pm
-SHA1 22c9843de03fd1dc3788f541b8f31ab247a0d6c5 lib/Search/GIN/Extract/Class.pm
-SHA1 a636661e7f714ffabd02c47fca5b4c060f9c2b43 lib/Search/GIN/Extract/Delegate.pm
-SHA1 bdfaab429f1590abd84f45ef7d89259798b57931 lib/Search/GIN/Extract/Multiplex.pm
-SHA1 dc1e65a9c0dcf5c32fd3cea19cb9e56d92581b0f lib/Search/GIN/Indexable.pm
-SHA1 36b229bfad94f47cf10f8f105798a3751f1844e8 lib/Search/GIN/Keys.pm
-SHA1 69052354b343dbf0dbf9923f6f080d50db84eed2 lib/Search/GIN/Keys/Deep.pm
-SHA1 0e204be979a20d4597f8101a50d47fc6a8e0addc lib/Search/GIN/Keys/Expand.pm
-SHA1 6fa85a6152c315d8c8ab94887cb619a2fb20e7f9 lib/Search/GIN/Keys/Join.pm
-SHA1 e05ca9686dd17a1ec2e1be3800e46652670c14f4 lib/Search/GIN/Query.pm
-SHA1 52ceea3b51ab3a4a6c13767176656ba0fe208430 lib/Search/GIN/Query/Attributes.pm
-SHA1 07255c95f170e68a1d2f19dcbb677b3d16d93781 lib/Search/GIN/Query/Class.pm
-SHA1 8028fe3ab402d002a54fc9a20d4dc79fed84ce08 lib/Search/GIN/Query/Manual.pm
-SHA1 5dc0adcdc75947aa74a5dee636aa3f48cdca3e4a lib/Search/GIN/SelfIDs.pm
+SHA1 5dc92bf9c5b0d510b725d60f0e67867a81a206f2 Changes
+SHA1 50ecb593d89009632b02a2b0d65f62a95bfa51d3 LICENSE
+SHA1 00b9dd45d26b6316550a5eff95203304fba141b2 MANIFEST
+SHA1 73d8bc31b8197243afc781a2a9e7dfb31aa53de2 META.yml
+SHA1 4cbf043348cd430a95c3060dc94cf5586d010cca Makefile.PL
+SHA1 3034f3777b1b591a587334cdb157f138f0913f08 README
+SHA1 3c070edcf08bda8b7a53aa99a23d7abe65dd164c dist.ini
+SHA1 d842cb587e65897ab219975808e437ce23b3362a lib/Search/GIN.pm
+SHA1 c54f23c19eb9ec6143dbbeb8ddfcd8c33b5abbf8 lib/Search/GIN/Callbacks.pm
+SHA1 a92eebbc0feb35fcdbe270bd1b7303a65800ae6d lib/Search/GIN/Core.pm
+SHA1 b37f42b344cea61a8ff801b2cc4cb31777891e89 lib/Search/GIN/DelegateToIndexed.pm
+SHA1 87888b7fd6b543e44db4a4a0eaca2ac965b5df68 lib/Search/GIN/Driver.pm
+SHA1 3aa1eef362975d2b799e6148031db62eaa67b756 lib/Search/GIN/Driver/Hash.pm
+SHA1 b730cf3c58059ef59354d4dbbefe0fad62d89f6d lib/Search/GIN/Driver/Pack.pm
+SHA1 0d64ca599fb8f7d11bb4ce6d813bfa82897e79ad lib/Search/GIN/Driver/Pack/Delim.pm
+SHA1 09d8960e61d29253641bb9551dbc67cc72bc4a44 lib/Search/GIN/Driver/Pack/IDs.pm
+SHA1 4bf9e13c01fed5575adb2ff3fc32d78826da8e2e lib/Search/GIN/Driver/Pack/Length.pm
+SHA1 cdfd89798b4727bd19fded932cac1528f52833e5 lib/Search/GIN/Driver/Pack/UUID.pm
+SHA1 14ac9ce6a79b069a4b442d4ca53c66f055ced5b7 lib/Search/GIN/Driver/Pack/Values.pm
+SHA1 e2147e9b4165d117f8c5c861f54c1faacce93518 lib/Search/GIN/Driver/TXN.pm
+SHA1 6816bdcb7770acbe405bd7b3fe5e3372cbe81ecb lib/Search/GIN/Extract.pm
+SHA1 6e22bd33baa8941c04b6b280311bd4dc8053a2ec lib/Search/GIN/Extract/Attributes.pm
+SHA1 fbb11c829d3894d36b429fd16ccef4bdba750423 lib/Search/GIN/Extract/Callback.pm
+SHA1 6aaae5c06757587464d9bb283989fe60e43a27f4 lib/Search/GIN/Extract/Class.pm
+SHA1 700aadcd3702265539db808d2bf705e2ffc8b194 lib/Search/GIN/Extract/Delegate.pm
+SHA1 fe712af9aa90aee6b7904546f976406447e7604a lib/Search/GIN/Extract/Multiplex.pm
+SHA1 9353bc747b78b45baecf395235bbb9f69c0b080c lib/Search/GIN/Indexable.pm
+SHA1 14771d22e6bdce7644c79d35a904a286cffbfd2b lib/Search/GIN/Keys.pm
+SHA1 7e479f0e7f42dffeee7b3a82ca6155ffb587896a lib/Search/GIN/Keys/Deep.pm
+SHA1 a91ff65d890b87ef142937d87f6fe9ec8f9b263e lib/Search/GIN/Keys/Expand.pm
+SHA1 454f57c7094c75fdb7b687904e1a170e441d2e7e lib/Search/GIN/Keys/Join.pm
+SHA1 ae3c35b358b61cc5e7a26b6e3d03683a37718279 lib/Search/GIN/Query.pm
+SHA1 9d3b180bcfb531a3fc834f28a9f030d14f3ff0f2 lib/Search/GIN/Query/Attributes.pm
+SHA1 0388fa8cf97c4f06fdceabeba2a87be086557850 lib/Search/GIN/Query/Class.pm
+SHA1 c9bf656777336bce78dfeebbbef0b2d11a5f6c3e lib/Search/GIN/Query/Manual.pm
+SHA1 463e256d4c2f8627d5c1c9c32b4a45280aaef019 lib/Search/GIN/Query/Set.pm
+SHA1 f1a8d49023f109174dfc5f09f0056f4e9df02732 lib/Search/GIN/SelfIDs.pm
+SHA1 9e65f3976c7c7eabaeab878d513ff95b38a07776 t/00-compile.t
 SHA1 34985efc8abdc6708e03685b0e0d1cd2f44d3e8a t/attrs.t
 SHA1 de5d11d75733971d58ef65c1914a28c4447ef718 t/class.t
-SHA1 2def6830b97af6ccd50234508da1c3b2b446676d t/core.t
+SHA1 95bdc078179abccd434f4ba67aaf6505d562fbfc t/core.t
 SHA1 ea981bb39d6702edd7a0e2500a2f702ffe7b938a t/key_expansion.t
+SHA1 b30cbdfaf935017c4568c0c91b242438cb87786e t/release-pod-syntax.t
 SHA1 80af19b3a05acc4a5f4edc0ccbfc09d16e9e81d2 t/rels.t
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.9 (GNU/Linux)
 
-iEYEARECAAYFAkuPpCcACgkQepC8e2JS8ecDQgCgibrd6LrJkh6B4JnriC0ErUtz
-7vcAn3hiT5qYevymjitku6hI/h5GY/k+
-=2tRH
+iEYEARECAAYFAk0BlK8ACgkQHXNlp1WBXUJdmwCdFyu2G9qsEraY3aMlNHAQMbQu
+VTgAnR+pe2DSf+TZ5W95a5bymtRBOuXs
+=e2gH
 -----END PGP SIGNATURE-----
@@ -0,0 +1,20 @@
+name    = Search-GIN
+author  = Yuval Kogman <nothingmuch@cpan.org>
+license = Perl_5
+copyright_holder = Yuval Kogman, Infinity Interactive
+copyright_year   = 2010
+
+version = 0.07
+
+[@Basic]
+[PodSyntaxTests]
+[PodWeaver]
+[ReadmeFromPod]
+[CheckChangeLog]
+[PkgVersion]
+[CompileTests]
+[AutoPrereq]
+skip = ^(Bar|Base|MyTagQuery)$
+[Signature]
+[Prereq]
+Moose = 0.89
@@ -1,11 +1,18 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Callbacks;
+BEGIN {
+  $Search::GIN::Callbacks::VERSION = '0.07';
+}
+# ABSTRACT: Provide callbacks
+
 use Moose::Role;
 
 with qw(Search::GIN::Core);
 
-foreach my $cb qw(objects_to_ids extract_values extract_query compare_values consistent ids_to_objects) {
+foreach my $cb (
+    qw(objects_to_ids extract_values extract_query compare_values
+        consistent ids_to_objects) ) {
     has "${cb}_callback" => (
         isa => "CodeRef",
         is  => "rw",
@@ -15,22 +22,37 @@ foreach my $cb qw(objects_to_ids extract_values extract_query compare_values con
     eval "sub $cb { \$self->${cb}_callback->(@_) }";
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Callbacks - 
+Search::GIN::Callbacks - Provide callbacks
 
-=head1 SYNOPSIS
+=head1 VERSION
 
-    use Search::GIN::Callbacks;
+version 0.07
 
 =head1 DESCRIPTION
 
+This role provides a few callbacks for L<Search::GIN>.
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Core;
+BEGIN {
+  $Search::GIN::Core::VERSION = '0.07';
+}
+# ABSTRACT: Core of Search::GIN
+
 use Moose::Role;
 
 use Data::Stream::Bulk::Util qw(bulk unique);
@@ -63,6 +68,32 @@ sub insert {
     }
 }
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Core - Core of Search::GIN
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::DelegateToIndexed;
+BEGIN {
+  $Search::GIN::DelegateToIndexed::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use namespace::clean -except => 'meta';
@@ -24,15 +29,19 @@ sub objects_to_ids {
     map { $_->gin_id } @objs;
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::DelegateToIndexed - 
+Search::GIN::DelegateToIndexed - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -40,6 +49,19 @@ Search::GIN::DelegateToIndexed -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver::Hash;
+BEGIN {
+  $Search::GIN::Driver::Hash::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use Set::Object;
@@ -78,6 +83,32 @@ sub insert_entry {
     }
 }
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Driver::Hash - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver::Pack::Delim;
+BEGIN {
+  $Search::GIN::Driver::Pack::Delim::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use namespace::clean -except => [qw(meta)];
@@ -15,6 +20,32 @@ sub unpack_delim {
     split("\0", $string );
 }
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Driver::Pack::Delim - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,12 +1,43 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver::Pack::IDs;
+BEGIN {
+  $Search::GIN::Driver::Pack::IDs::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use namespace::clean -except => 'meta';
 
 requires qw(pack_ids unpack_ids);
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Driver::Pack::IDs - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver::Pack::Length;
+BEGIN {
+  $Search::GIN::Driver::Pack::Length::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use namespace::clean -except => [qw(meta)];
@@ -15,15 +20,19 @@ sub unpack_length {
     unpack("(n/a*)*", $string);
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Driver::PackLength - 
+Search::GIN::Driver::Pack::Length - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -31,6 +40,19 @@ Search::GIN::Driver::PackLength -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver::Pack::UUID;
+BEGIN {
+  $Search::GIN::Driver::Pack::UUID::VERSION = '0.07';
+}
+# ABSTRACT: UUID key packing
+
 use Moose::Role;
 
 use namespace::clean -except => [qw(meta)];
@@ -17,15 +22,19 @@ sub pack_ids {
     pack("(a16)*", @ids); # FIXME enforce size
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Driver::PackUUID - UUID key packing
+Search::GIN::Driver::Pack::UUID - UUID key packing
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -33,6 +42,19 @@ Search::GIN::Driver::PackUUID - UUID key packing
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,12 +1,43 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver::Pack::Values;
+BEGIN {
+  $Search::GIN::Driver::Pack::Values::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use namespace::clean -except => 'meta';
 
 requires qw(pack_values unpack_values);
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Driver::Pack::Values - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver::Pack;
+BEGIN {
+  $Search::GIN::Driver::Pack::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 with qw(
@@ -8,6 +13,32 @@ with qw(
     Search::GIN::Driver::Pack::IDs
 );
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Driver::Pack - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver::TXN;
+BEGIN {
+  $Search::GIN::Driver::TXN::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use Scope::Guard;
@@ -76,16 +81,19 @@ sub txn_do {
     }
 }
 
+1;
 
-__PACKAGE__
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Driver::TXN - 
+Search::GIN::Driver::TXN - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -93,6 +101,19 @@ Search::GIN::Driver::TXN -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Driver;
+BEGIN {
+  $Search::GIN::Driver::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use Data::Stream::Bulk::Util qw(bulk nil cat unique);
@@ -76,15 +81,19 @@ sub fetch_entries_all {
     return bulk( grep { $seen{$_} == $n } $last->all );
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Driver - 
+Search::GIN::Driver - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -92,6 +101,19 @@ Search::GIN::Driver -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,8 +1,12 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Extract::Attributes;
-use Moose;
+BEGIN {
+  $Search::GIN::Extract::Attributes::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose;
 use namespace::clean -except => 'meta';
 
 with qw(
@@ -40,15 +44,19 @@ sub get_meta_attrs {
     }
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Extract::Attributes - 
+Search::GIN::Extract::Attributes - use Moose;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -56,6 +64,19 @@ Search::GIN::Extract::Attributes -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,8 +1,12 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Extract::Callback;
-use Moose;
+BEGIN {
+  $Search::GIN::Extract::Callback::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose;
 use namespace::clean -except => 'meta';
 
 with qw(
@@ -26,15 +30,19 @@ sub extract_values {
 
 __PACKAGE__->meta->make_immutable;
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Extract::Callback - 
+Search::GIN::Extract::Callback - use Moose;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -42,6 +50,19 @@ Search::GIN::Extract::Callback -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,10 +1,13 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Extract::Class;
-use Moose;
+BEGIN {
+  $Search::GIN::Extract::Class::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose;
 use MRO::Compat;
-
 use namespace::clean -except => 'meta';
 
 with qw(
@@ -29,15 +32,19 @@ sub extract_values {
     });
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Extract::Class - 
+Search::GIN::Extract::Class - use Moose;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -45,6 +52,19 @@ Search::GIN::Extract::Class -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,8 +1,12 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Extract::Delegate;
-use Moose::Role;
+BEGIN {
+  $Search::GIN::Extract::Delegate::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose::Role;
 use namespace::clean -except => 'meta';
 
 has extract => (
@@ -14,6 +18,32 @@ has extract => (
 
 sub extract_values { shift->extract->extract_values(@_) }
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Extract::Delegate - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,8 +1,12 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Extract::Multiplex;
-use Moose;
+BEGIN {
+  $Search::GIN::Extract::Multiplex::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose;
 use namespace::clean -except => 'meta';
 
 with qw(Search::GIN::Extract);
@@ -21,15 +25,19 @@ sub extract_values {
 
 __PACKAGE__->meta->make_immutable;
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Extract::Multiplex - 
+Search::GIN::Extract::Multiplex - use Moose;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -37,6 +45,19 @@ Search::GIN::Extract::Multiplex -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,12 +1,43 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Extract;
+BEGIN {
+  $Search::GIN::Extract::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 use namespace::clean -except => 'meta';
 
 requires 'extract_values';
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Extract - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Indexable;
+BEGIN {
+  $Search::GIN::Indexable::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 requires 'gin_extract_values';
@@ -20,15 +25,19 @@ sub gin_consistent {
     $query->gin_consistent($index, $self, @args);
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Indexable - 
+Search::GIN::Indexable - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -36,6 +45,19 @@ Search::GIN::Indexable -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,8 +1,12 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Keys::Deep;
-use Moose::Role;
+BEGIN {
+  $Search::GIN::Keys::Deep::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose::Role;
 use namespace::clean -except => 'meta';
 
 with qw(
@@ -17,15 +21,19 @@ sub process_keys {
     $self->join_keys( $self->expand_keys(@keys) );
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Keys::Deep - 
+Search::GIN::Keys::Deep - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -33,6 +41,19 @@ Search::GIN::Keys::Deep -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,10 +1,13 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Keys::Expand;
-use Moose::Role;
+BEGIN {
+  $Search::GIN::Keys::Expand::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose::Role;
 use Carp qw(croak);
-
 use namespace::clean -except => 'meta';
 
 sub expand_keys {
@@ -50,6 +53,32 @@ sub expand_keys_hash {
     } keys %$hash;
 }
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Keys::Expand - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,6 +1,11 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Keys::Join;
+BEGIN {
+  $Search::GIN::Keys::Join::VERSION = '0.07';
+}
+# ABSTRACT:
+
 use Moose::Role;
 
 sub join_keys {
@@ -14,7 +19,33 @@ sub join_key {
     join ":", map { ref($_) ? @$_ : $_ } @key;
 }
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Keys::Join - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
 
@@ -1,12 +1,42 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Keys;
-use Moose::Role;
+BEGIN {
+  $Search::GIN::Keys::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose::Role;
 use namespace::clean -except => 'meta';
 
 requires qw(process_keys);
 
-__PACKAGE__
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Keys - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
 
 __END__
@@ -1,10 +1,13 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Query::Attributes;
-use Moose;
+BEGIN {
+  $Search::GIN::Query::Attributes::VERSION = '0.07';
+}
+# ABSTRACT: Create attributes-based GIN queries
 
+use Moose;
 use Carp qw(croak);
-
 use namespace::clean -except => [qw(meta)];
 
 with qw(
@@ -79,9 +82,9 @@ sub compare_test_deep {
 
 __PACKAGE__->meta->make_immutable;
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
@@ -89,6 +92,10 @@ __END__
 
 Search::GIN::Query::Attributes - Create attributes-based GIN queries
 
+=head1 VERSION
+
+version 0.07
+
 =head1 SYNOPSIS
 
     use Search::GIN::Query::Attributes;
@@ -126,4 +133,19 @@ Attributes of the object you want to find.
         },
     );
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
+
+
+__END__
+
@@ -1,10 +1,13 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Query::Class;
-use Moose;
+BEGIN {
+  $Search::GIN::Query::Class::VERSION = '0.07';
+}
+# ABSTRACT: Create class-based GIN queries
 
+use Moose;
 use Carp qw(croak);
-
 use namespace::clean -except => [qw(meta)];
 
 with qw(
@@ -90,9 +93,9 @@ sub check_object {
 
 __PACKAGE__->meta->make_immutable;
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
@@ -100,6 +103,10 @@ __END__
 
 Search::GIN::Query::Class - Create class-based GIN queries
 
+=head1 VERSION
+
+version 0.07
+
 =head1 SYNOPSIS
 
     use Search::GIN::Query::Class;
@@ -147,4 +154,19 @@ The name of the package that the object is blessed into.
         blessed => 'Person',
     );
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
+
+
+__END__
+
@@ -1,8 +1,12 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Query::Manual;
-use Moose;
+BEGIN {
+  $Search::GIN::Query::Manual::VERSION = '0.07';
+}
+# ABSTRACT: Create manual GIN queries
 
+use Moose;
 use namespace::clean -except => 'meta';
 
 with qw(
@@ -59,9 +63,9 @@ sub consistent {
 
 __PACKAGE__->meta->make_immutable;
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
@@ -69,6 +73,10 @@ __END__
 
 Search::GIN::Query::Manual - Create manual GIN queries
 
+=head1 VERSION
+
+version 0.07
+
 =head1 SYNOPSIS
 
     use Search::GIN::Query::Manual;
@@ -99,6 +107,19 @@ Creates a new query.
 
 The keys and values to build the query for.
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -0,0 +1,137 @@
+use strict;
+use warnings;
+package Search::GIN::Query::Set;
+BEGIN {
+  $Search::GIN::Query::Set::VERSION = '0.07';
+}
+# ABSTRACT: Create queries with set operations
+
+use Moose;
+use namespace::clean -except => 'meta';
+
+with qw(
+    Search::GIN::Query
+);
+
+use constant 'method' => 'set';
+use constant 'has_method' => 1;
+
+has operation => (
+    isa     => 'Str',
+    is      => 'ro',
+    default => 'UNION'
+);
+
+has subqueries => (
+    isa => "ArrayRef",
+    is  => "ro",
+    required => 1,
+);
+
+has _processed => (
+    is => "ro",
+    lazy_build => 1,
+);
+
+sub _build__processed {
+    my $self = shift;
+    return [ map { { $_->extract_values, () } }
+             @{$self->subqueries} ];
+}
+
+sub extract_values {
+    my $self  = shift;
+
+    return (
+        subqueries => $self->_processed,
+        operation  => $self->operation,
+        method     => 'set'
+    );
+}
+
+sub consistent {
+    return 1;
+}
+
+__PACKAGE__->meta->make_immutable;
+
+1;
+
+
+
+=pod
+
+=head1 NAME
+
+Search::GIN::Query::Set - Create queries with set operations
+
+=head1 VERSION
+
+version 0.07
+
+=head1 SYNOPSIS
+
+    # build a query like:
+    # (type:pdf OR type:png) AND (name:Homer OR name:Bart)
+
+    use Search::GIN::Query::Set;
+    use Search::GIN::Query::Manual;
+
+    my $query = Search::GIN::Query::Set->new(
+        operation => 'INTERSECT',
+        subqueries => [
+            Search::GIN::Query::Manual->new(
+                values => {
+                   type => [qw(pdf png)]
+                }
+            ),
+            Search::GIN::Query::Manual->new(
+                values => {
+                   name => [qw(Homer Bart)]
+                }
+            ),
+        ]
+    );
+
+=head1 DESCRIPTION
+
+Creates a manual GIN query that can be used to search using basic set
+theory, in order to build more complex queries.
+
+This query doesn't provide any specific search, it's just a set
+operator for subqueries. You can build complex queries by using other
+set queries as subqueries for a set query.
+
+=head1 METHODS/SUBROUTINES
+
+=head2 new
+
+Creates a new query.
+
+=head1 ATTRIBUTES
+
+=head2 subqueries
+
+The subqueries to process
+
+=head2 operation
+
+One of the basic set operators: "UNION", "INTERSECT" and "EXCEPT". The
+default is "UNION"
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
+=cut
+
+
+__END__
+
@@ -1,8 +1,12 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::Query;
-use Moose::Role;
+BEGIN {
+  $Search::GIN::Query::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose::Role;
 use namespace::clean -except => [qw(meta)];
 
 requires qw(
@@ -10,15 +14,19 @@ requires qw(
     extract_values
 );
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::Query - 
+Search::GIN::Query - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -26,6 +34,19 @@ Search::GIN::Query -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,8 +1,12 @@
-#!/usr/bin/perl
-
+use strict;
+use warnings;
 package Search::GIN::SelfIDs;
-use Moose::Role;
+BEGIN {
+  $Search::GIN::SelfIDs::VERSION = '0.07';
+}
+# ABSTRACT:
 
+use Moose::Role;
 use namespace::clean -except => [qw(meta)];
 
 sub ids_to_objects {
@@ -15,15 +19,19 @@ sub objects_to_ids {
     return @objs;
 }
 
-__PACKAGE__
+1;
+
 
-__END__
 
 =pod
 
 =head1 NAME
 
-Search::GIN::SelfIDs - 
+Search::GIN::SelfIDs - use Moose::Role;
+
+=head1 VERSION
+
+version 0.07
 
 =head1 SYNOPSIS
 
@@ -31,6 +39,19 @@ Search::GIN::SelfIDs -
 
 =head1 DESCRIPTION
 
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
+
 =cut
 
 
+__END__
+
@@ -1,15 +1,14 @@
-#!/usr/bin/perl
-
-package Search::GIN;
-
 use strict;
 use warnings;
+package Search::GIN;
+BEGIN {
+  $Search::GIN::VERSION = '0.07';
+}
+# ABSTRACT: Generalized Inverted Indexing
 
-our $VERSION = "0.04";
+1;
 
-__PACKAGE__
 
-__END__
 
 =pod
 
@@ -17,21 +16,45 @@ __END__
 
 Search::GIN - Generalized Inverted Indexing
 
-=head1 SYNOPSIS
+=head1 VERSION
 
-	# Coming Soon
+version 0.07
 
 =head1 DESCRIPTION
 
-This is used by L<KiokuDB> for custom indexing.
+Inverted Indexing is an indexing method that maps from content to location in
+storage.
+
+Generalized Inverted Indexing (GIN, for short) is an inverted indexing method
+in which the index is unaware of what data exactly is it indexing.
+
+L<Search::GIN> is primarily used by L<KiokuDB> for custom indexing.
+
+=head1 SEE ALSO
+
+=over 4
 
-More documentation will be released shortly.
+=item * L<pgsql-hackers msg #00960|http://archives.postgresql.org/pgsql-hackers/
+2006-04/msg00960.php>
 
-=head1 COPYRIGHT
+=item * L<Inverted_index on Wikipedia|http://en.wikipedia.org/wiki/
+Inverted_index>
 
-    Copyright (c) 2008 - 2010 Yuval Kogman, Infinity Interactive. All
-    rights reserved This program is free software; you can redistribute
-    it and/or modify it under the same terms as Perl itself.
+=back
+
+=head1 AUTHOR
+
+Yuval Kogman <nothingmuch@cpan.org>
+
+=head1 COPYRIGHT AND LICENSE
+
+This software is copyright (c) 2010 by Yuval Kogman, Infinity Interactive.
+
+This is free software; you can redistribute it and/or modify it under
+the same terms as the Perl 5 programming language system itself.
 
 =cut
 
+
+__END__
+
@@ -0,0 +1,48 @@
+#!perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+
+
+use File::Find;
+use File::Temp qw{ tempdir };
+
+my @modules;
+find(
+  sub {
+    return if $File::Find::name !~ /\.pm\z/;
+    my $found = $File::Find::name;
+    $found =~ s{^lib/}{};
+    $found =~ s{[/\\]}{::}g;
+    $found =~ s/\.pm$//;
+    # nothing to skip
+    push @modules, $found;
+  },
+  'lib',
+);
+
+my @scripts = glob "bin/*";
+
+my $plan = scalar(@modules) + scalar(@scripts);
+$plan ? (plan tests => $plan) : (plan skip_all => "no tests to run");
+
+{
+    # fake home for cpan-testers
+    # no fake requested ## local $ENV{HOME} = tempdir( CLEANUP => 1 );
+
+    like( qx{ $^X -Ilib -e "require $_; print '$_ ok'" }, qr/^\s*$_ ok/s, "$_ loaded ok" )
+        for sort @modules;
+
+    SKIP: {
+        eval "use Test::Script 1.05; 1;";
+        skip "Test::Script needed to test script compilation", scalar(@scripts) if $@;
+        foreach my $file ( @scripts ) {
+            my $script = $file;
+            $script =~ s!.*/!!;
+            script_compiles( $file, "$script script compiles" );
+        }
+    }
+}
@@ -27,10 +27,12 @@ use Set::Object;
             Search::GIN::SelfIDs
 		),
 		'Search::GIN::DelegateToIndexed' => {
-			excludes => "objects_to_ids", # SelfIDs
+			-excludes => "objects_to_ids", # SelfIDs
 		},
     );
+}
 
+{
     # you create the query objects, the GIN implementation uses them
     # consistently with the index
     package MyTagQuery;
@@ -53,7 +55,8 @@ use Set::Object;
             values => [ $self->tags->members ],
         );
     }
-
+}
+{
     package MyTagQuery::Intersection;
     use Moose;
 
@@ -73,7 +76,8 @@ use Set::Object;
     };
 
     __PACKAGE__->meta->make_immutable;
-
+}
+{
     package MyTagQuery::Union;
     use Moose;
 
@@ -85,7 +89,8 @@ use Set::Object;
     }
 
     __PACKAGE__->meta->make_immutable;
-
+}
+{
     # this is an indexable object
     package MyObject;
     use Moose;
@@ -0,0 +1,15 @@
+#!perl
+
+BEGIN {
+  unless ($ENV{RELEASE_TESTING}) {
+    require Test::More;
+    Test::More::plan(skip_all => 'these tests are for release candidate testing');
+  }
+}
+
+use Test::More;
+
+eval "use Test::Pod 1.41";
+plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
+
+all_pod_files_ok();